op {
  graph_op_name: "TensorScatterUpdate"
  in_arg {
    name: "tensor"
    description: <<END
Tensor to copy/update.
END
  }
  in_arg {
    name: "indices"
    description: <<END
Index tensor.
END
  }
  in_arg {
    name: "updates"
    description: <<END
Updates to scatter into output.
END
  }
  out_arg {
    name: "output"
    description: <<END
A new tensor with the given shape and updates applied according
to the indices.
END
  }
  summary: "Scatter `updates` into an existing tensor according to `indices`."
  description: <<END
This operation creates a new tensor by applying sparse `updates` to the passed
in `tensor`.
This operation is very similar to `tf.scatter_nd`, except that the updates are
scattered onto an existing tensor (as opposed to a zero-tensor). If the memory
for the existing tensor cannot be re-used, a copy is made and updated.

If `indices` contains duplicates, then we pick the last update for the index.

If an out of bound index is found on CPU, an error is returned.

**WARNING**: There are some GPU specific semantics for this operation.
- If an out of bound index is found, the index is ignored.
- The order in which updates are applied is nondeterministic, so the output
will be nondeterministic if `indices` contains duplicates.

`indices` is an integer tensor containing indices into a new tensor of shape
`shape`.

* `indices` must have at least 2 axes: `(num_updates, index_depth)`.
* The last axis of `indices` is how deep to index into `tensor` so  this index
  depth must be less than the rank of `tensor`: `indices.shape[-1] <= tensor.ndim`

if `indices.shape[-1] = tensor.rank` this Op indexes and updates scalar elements.
if `indices.shape[-1] < tensor.rank` it indexes and updates slices of the input
`tensor`.

Each `update` has a rank of `tensor.rank - indices.shape[-1]`.
The overall shape of `updates` is:

```
indices.shape[:-1] + tensor.shape[indices.shape[-1]:]
```

For usage examples see the python [tf.tensor_scatter_nd_update](
https://www.tensorflow.org/api_docs/python/tf/tensor_scatter_nd_update) function

END
}
